package com.test.factory;

import com.test.definition.BeanDefinition;
import com.test.exception.BeansException;
import com.test.processor.BeanPostProcessor;

/**
 * 继承了ListableBeanFactory、AutowireCapableBeanFactory和ConfigurableBeanFactory的接口，
 * 提供了获取Bean定义、预实例化单例以及添加Bean后处理器的功能。
 */
public interface ConfigurableListableBeanFactory extends ListableBeanFactory, AutowireCapableBeanFactory, ConfigurableBeanFactory{

    /**
     * 根据Bean名称获取Bean的定义信息。
     *
     * @param beanName Bean的名称
     * @return BeanDefinition对象，包含Bean的定义信息
     * @throws BeansException 如果获取Bean定义信息时出现错误
     */
    BeanDefinition getBeanDefinition(String beanName) throws BeansException;

    /**
     * 预实例化所有单例Bean，通常在Bean工厂初始化时调用此方法来提前加载单例Bean。
     *
     * @throws BeansException 如果预实例化单例Bean时出现错误
     */
    void preInstantiateSingletons() throws BeansException;

    /**
     * 添加一个Bean后处理器，用于在Bean初始化前后进行处理。
     *
     * @param beanPostProcessor 要添加的Bean后处理器
     */
    void addBeanPostProcessor(BeanPostProcessor beanPostProcessor);
}
